package com.easygem.front.service;

import com.easygem.common.model.front.TaskPackageResource;
import com.easygem.common.vo.front.ResourceInfoVO;
import com.easygem.common.vo.front.TaskPackageResourceVO;
import com.easygem.common.vo.front.TaskPackageVO;
import com.easygem.common.vo.system.PageVO;

import java.util.List;
import java.util.Map;

/**
 * @author 李鹏志
 * @version 1.0
 * @Description TODO
 * @date 2024/12/23 16:38
 */
public interface TaskPackageResourceService {
    /**
     *  根据任务包id删除任务包资源
     * @param resourceIds 任务包id
     * @return 删除的数量
     */
    int delByTPResourceId(List<Long> resourceIds);
    /**
     * 批量分配资源
     * @param batchAllocationMap 任务包id和资源id列表
     * @return 分配的数量
     *
     */
    int batchAllocationResource(Map<String, List<Long>> batchAllocationMap,Integer taskPackageId);
    /**
     *  回收资源
     * @param resourceIds 资源id列表
     * @return 回收的数量
     */
    int recycleResources(List<Long> resourceIds);
    /**
     * 查询已分配的资源
     * @param tPResourceVO 任务包资源
     * @return 已分配的资源列表
     */
    public PageVO<TaskPackageResource> getAllAssignedResources(Integer pageNum, Integer pageSize, TaskPackageResourceVO tPResourceVO);
    /**
     * 查询未分配的资源
     * @param tPResourceVO 任务包资源
     * @return 未分配的资源列表
     */
    public PageVO<TaskPackageResource> getNotAssignedResources(Integer pageNum, Integer pageSize,TaskPackageResourceVO tPResourceVO);

    /**
     *  下载任务包资源
     * @param resourceIds 资源id列表
     * @return 资源列表
     */
    List<TaskPackageResource> downTPExcel(List<Long> resourceIds);

    /**
     * 根据任务包id查询所有资源
     * @param taskPackageId 任务包id
     * @return 资源列表
     */
    PageVO<TaskPackageResource> getAllResources(Integer pageNum, Integer pageSize,Integer taskPackageId);

    /**
     * 导入资源
     * @param resourceInfos 资源
     * @param taskPackageId 任务包id
     * @return 导入的数量
     */
    String importResource(List<ResourceInfoVO> resourceInfos, Integer taskPackageId,String accountName) throws Exception ;

    /**
     * 创建任务包
     * @param taskPackageVO 任务包对象
     * @return 创建的数量
     */
    String createTaskPackage(List<ResourceInfoVO> resourceInfos,TaskPackageVO taskPackageVO)throws Exception;

    /**
     * 数据库去重
     * @param list 资源列表
     * @return 去重后的资源列表
     */
    List<ResourceInfoVO> sqlDeWeight(List<ResourceInfoVO> list);

    /**
     * 根据手机号查重
     * @param taskPackageIds 传入的任务包编号（用来判断查重方式）
     * @return 处理的数量
     */
    Integer findDuplicatePhones( List<Integer> taskPackageIds);
    /**
     * 资源回收
     * @param taskPackageVO 任务包对象
     * @return 操作状态
     */
    String resourceRecycling(TaskPackageVO taskPackageVO,
                             Long oldUserId,
                             Long newUserId);

    /**
     * 客户回收
     * @param taskPackageVO 任务包对象
     * @return 操作状态
     */
    String customerRecycling(TaskPackageVO taskPackageVO,
                             Long oldUserId,
                             Long newUserId);

    /**
     * 批量导入资源 - 用于大数据量导入处理
     * @param resourceInfos 资源批次数据
     * @param taskPackageId 任务包ID
     * @param accountName 账号名称
     * @return 导入的记录数
     * @throws Exception 导入异常
     */
    int batchImportResource(List<ResourceInfoVO> resourceInfos, Integer taskPackageId, String accountName) throws Exception;
    
    /**
     * 创建大型任务包 - 用于大数据量文件处理
     * @param mergedFilename 合并后的文件名
     * @param taskPackageVO 任务包信息
     * @return 导入任务ID
     * @throws Exception 处理异常
     */
    String createLargeTaskPackage(String mergedFilename, TaskPackageVO taskPackageVO) throws Exception;

    /**
     * 获取导入任务的统计信息
     * @param taskPackageId 任务包ID
     * @return 统计信息，如果不存在则返回null
     */
    Map<String, Object> getImportStats(Integer taskPackageId);

}
